package com.uuzz.lottery.agent.gateway.base;

/**
 * 
 * 类 名: AbsCall
 * 描 述: 带有过滤输入输出参数功能的调用器
 * 作 者: liuqing
 * 创 建： 2015年5月5日
 * 版 本：
 * @param <I> 输入参数
 * @param <O> 输出参数
 * 历 史: (版本) 作者 时间 注释
 */
public abstract class AbstractFilterCall<I,O> implements IFilterCall<I,O>{
	
	/**
	 * 过滤器
	 */
	private final FilterChainImpl<I,O> chain = new FilterChainImpl<I,O>(this); 	
	
	
	@Override
	public void addFilters(IFilter<I, O>... filters) {
		for(IFilter<I, O> filter:filters){
			chain.addFilter(filter);
		}		
	}

	@Override
	public final void call(I in,O out) {
		chain.doFilter(in, out);
	}
	
	protected abstract void doCall(I in,O out);

}
